﻿package frEngine.animateControler.particleControler.animate
{
    import __AS3__.vec.*;
    import frEngine.animateControler.particleControler.*;

    public class useFadeAndGrowth extends Object implements IParticleAnimate
    {
        public var isFadeToGrowth:Boolean;
        public var growthFrame:Number;
        public var fadeFrame:Number;
        public var gf_smooth:Boolean;
        public static const instance:useFadeAndGrowth = new useFadeAndGrowth;

        public function useFadeAndGrowth()
        {
            return;
        }// end function

        public function get objClass() : Class
        {
            return useFadeAndGrowth;
        }// end function

        public function canOpen(param1:ParticleParams) : Boolean
        {
            return param1.useGrowthAndFade;
        }// end function

        public function posCalculate(param1:ParticleStatus) : void
        {
            return;
        }// end function

        public function init(param1:ParticleStatus, param2:ParticleParams) : void
        {
            this.fadeFrame = param2.fade_time;
            this.growthFrame = param2.growth_time;
            this.isFadeToGrowth = param2.isFadeToGrowth;
            this.gf_smooth = param2.gf_smooth;
            return;
        }// end function

        private function fadeToGrowth(param1:ParticleStatus) : void
        {
            var _loc_4:int = 0;
            var _loc_5:int = 0;
            var _loc_6:ParticleItem = null;
            var _loc_7:Number = NaN;
            var _loc_8:int = 0;
            var _loc_2:* = param1.particleList;
            var _loc_3:* = _loc_2.length;
            if (this.gf_smooth)
            {
                _loc_4 = 0;
                while (_loc_4 < _loc_3)
                {
                    
                    _loc_6 = _loc_2[_loc_4];
                    if (!_loc_6.visible || !_loc_6.toUpdate)
                    {
                    }
                    else
                    {
                        _loc_5 = _loc_6.curFrame;
                        _loc_8 = _loc_6.life - this.growthFrame;
                        if (_loc_5 < this.fadeFrame)
                        {
                            _loc_7 = 1 - _loc_5 / this.fadeFrame;
                        }
                        else if (_loc_5 > _loc_8)
                        {
                            _loc_7 = (_loc_5 - _loc_8) / this.growthFrame;
                        }
                        else
                        {
                            _loc_7 = 0;
                        }
                        if (_loc_7 < 0.5)
                        {
                            _loc_7 = 2 * _loc_7 * _loc_7;
                        }
                        else
                        {
                            _loc_7 = 2 * _loc_7 * (2 - _loc_7) - 1;
                        }
                        _loc_6.size = _loc_7;
                    }
                    _loc_4++;
                }
            }
            else
            {
                _loc_4 = 0;
                while (_loc_4 < _loc_3)
                {
                    
                    _loc_6 = _loc_2[_loc_4];
                    if (!_loc_6.visible || !_loc_6.toUpdate)
                    {
                    }
                    else
                    {
                        _loc_5 = _loc_6.curFrame;
                        _loc_8 = _loc_6.life - this.growthFrame;
                        if (_loc_5 < this.fadeFrame)
                        {
                            _loc_7 = 1 - _loc_5 / this.fadeFrame;
                        }
                        else if (_loc_5 > _loc_8)
                        {
                            _loc_7 = (_loc_5 - _loc_8) / this.growthFrame;
                        }
                        else
                        {
                            _loc_7 = 0;
                        }
                        _loc_6.size = _loc_7;
                    }
                    _loc_4++;
                }
            }
            return;
        }// end function

        private function growthToFade(param1:ParticleStatus) : void
        {
            var _loc_4:int = 0;
            var _loc_5:int = 0;
            var _loc_6:ParticleItem = null;
            var _loc_7:Number = NaN;
            var _loc_8:int = 0;
            var _loc_2:* = param1.particleList;
            var _loc_3:* = _loc_2.length;
            if (this.gf_smooth)
            {
                _loc_4 = 0;
                while (_loc_4 < _loc_3)
                {
                    
                    _loc_6 = _loc_2[_loc_4];
                    if (!_loc_6.visible)
                    {
                    }
                    else
                    {
                        _loc_5 = _loc_6.curFrame;
                        _loc_8 = _loc_6.life - this.fadeFrame;
                        if (_loc_5 < this.growthFrame)
                        {
                            _loc_7 = _loc_5 / this.growthFrame;
                        }
                        else if (_loc_5 > _loc_8)
                        {
                            _loc_7 = 1 - (_loc_5 - _loc_8) / this.fadeFrame;
                        }
                        else
                        {
                            _loc_7 = 1;
                        }
                        if (_loc_7 < 0.5)
                        {
                            _loc_7 = 2 * _loc_7 * _loc_7;
                        }
                        else
                        {
                            _loc_7 = 2 * _loc_7 * (2 - _loc_7) - 1;
                        }
                        _loc_6.size = _loc_7;
                    }
                    _loc_4++;
                }
            }
            else
            {
                _loc_4 = 0;
                while (_loc_4 < _loc_3)
                {
                    
                    _loc_6 = _loc_2[_loc_4];
                    if (!_loc_6.visible)
                    {
                    }
                    else
                    {
                        _loc_5 = _loc_6.curFrame;
                        _loc_8 = _loc_6.life - this.fadeFrame;
                        if (_loc_5 < this.growthFrame)
                        {
                            _loc_7 = _loc_5 / this.growthFrame;
                        }
                        else if (_loc_5 > _loc_8)
                        {
                            _loc_7 = 1 - (_loc_5 - _loc_8) / this.fadeFrame;
                        }
                        else
                        {
                            _loc_7 = 1;
                        }
                        _loc_6.size = _loc_7;
                    }
                    _loc_4++;
                }
            }
            return;
        }// end function

        public function update(param1:ParticleStatus) : void
        {
            if (this.isFadeToGrowth)
            {
                this.fadeToGrowth(param1);
            }
            else
            {
                this.growthToFade(param1);
            }
            return;
        }// end function

    }
}
